// 实现一个LazyMan，可以按照以下方式调用:
// LazyMan(“Hank”)输出:
// Hi! This is Hank!

// LazyMan(“Hank”).sleep(10).eat(“dinner”)输出
// Hi! This is Hank!
// //等待10秒..
// Wake up after 10
// Eat dinner~

// LazyMan(“Hank”).eat(“dinner”).eat(“supper”)输出
// Hi This is Hank!
// Eat dinner~
// Eat supper~

// LazyMan(“Hank”).eat(“supper”).sleepFirst(5)输出
// //等待5秒
// Wake up after 5
// Hi This is Hank!
// Eat supper
// class _LazyMan {
//   constructor(name) {
//     this.tasks = []
//     const task = () => {
//       console.log(`Hi! This is ${name}`)
//       this.next()
//     }
//     this.tasks.push(task)
//     setTimeout(() => {
//       this.next()
//     }, 0)
//   }
//   next() {
//     const task = this.tasks.shift()
//     task && task()
//   }
//   sleep(time) {
//     this.sleepWrapper(time, false)
//     return this
//   }
//   sleepFirst(time) {
//     this.sleepWrapper(time, true)
//     return this
//   }
//   sleepWrapper(time, first) {
//     const task = () => {
//       setTimeout(() => {
//         console.log(`Wake up after ${time}`)
//         this.next()
//       }, time * 1000)
//     }
//     if (first) {
//       this.tasks.unshift(task)
//     } else {
//       this.tasks.push(task)
//     }
//   }
//   eat(food) {
//     const task = () => {
//       console.log(`Eat ${food}`);
//       this.next();
//     };
//     this.tasks.push(task);
//     return this;
//   }
// }


// class __LazyMan {
//   constructor(name) {
//     this.tasks = []
//     let fn = (name) => {
//       console.log(`Hi! This is ${name}`)
//       this.next()
//     }
//     this.tasks.push(fn)

//     setTimeout(() => {
//       this.next()
//     })
//   }
//   next(task) {
//     task && this.tasks.shift()()
//   }
//   sleep() {

//   }
//   eat() {

//   }
//   sleep() {

//   }
//   sleepFirst() {

//   }
// }






// 测试
const lazyMan = (name) => new _LazyMan(name)

lazyMan('Hank').sleep(1).eat('dinner')

// lazyMan('Hank').eat('dinner').eat('supper')

// lazyMan('Hank').eat('supper').sleepFirst(5)

